# https://regex101.com/ 验证正则的网站
# 正则的特殊元字符 . * + ? \ [ ] ^ $ { } | ( )
# 点表示匹配除了换行符之外的所有字符
import re

# content = '苹果是绿色的,橙子是橙色的,香蕉是黄色的,乌鸦是黑色的'

# re.match() 尝试从字符串的起始位置匹配一个模式，如果不是起始位置匹配成功的话，match()就返回none。

# print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
# print(re.match('com', 'www.runoob.com'))  # 不在起始位置匹配


# re.search() 扫描整个字符串并返回第一个成功的匹配(只返回一个匹配)

# print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
# print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配


# Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

# phone = "2004-959-559 # 这是一个国外电话号码"
#
# # 删除字符串中的 Python注释
# print(re.sub(r'#.*','',phone))
#
# # 删除非数字(-)的字符串
# print(re.sub(r'\D','', phone))

# re.compile()函数用于编译正则表达式，生成一个正则表达式（ Pattern ）对象，供 match() 和 search() 这两个函数使用。
'''简单来说就是产生一个正则的对象，里面的属性是正则匹配的规则，可以通过这个对象调用match（）和search（）这两个方法
，这两个方法里面的属性是要进行正则的内容'''

# content = 'abc1234567890def'
#
# pattern = re.compile(r'\d+')  # 用于匹配至少一个数字
# print(pattern.search(content).group())
#
# m = pattern.match('one12twothree34four', 2, 10)  # 从'e'的位置(2,10)开始匹配，没有匹配
# print(m)
#
# m2 = pattern.match('one12twothree34four', 3, 10)  # 从'1'的位置(3,10)开始匹配，正好匹配
# print(m2.start())
'''

group([group1, …]) 方法用于获得一个或多个分组匹配的字符串，当要获得整个匹配的子串时，可直接使用 group() 或 group(0)；
start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置（子串第一个字符的索引），参数默认值为 0；
end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置（子串最后一个字符的索引+1），参数默认值为 0；
span([group]) 方法返回 (start(group), end(group))

'''

# findall()在字符串中找到正则表达式所匹配的所有子串，并返回一个列表，如果没有找到匹配的，则返回空列表。
# 注意： match 和 search 是匹配一次 findall 匹配所有。

# obj = re.compile(r'\d+')
# content = '123456abc7890'
# result = obj.findall(content)
# content2 = 'abcasdkjkals789'
# result2 = obj.findall(content2)
# print(result)
# print(result2)

# re.finditer（），和 findall 类似，在字符串中找到正则表达式所匹配的所有子串，并把它们作为一个迭代器返回。

# it = re.finditer(r"\d+","12a32bc43jf3")  # 匹配至少一个数字
# for item in it:
#     print(item.group())

# re.split（）方法按照能够匹配的子串将字符串分割后返回列表，它的使用形式如下
# result = re.split(r'\D+','123 123 456')
# print(result)

# 用正则表达式求非负整数
# a = re.compile(r'-\d')
#
# num = input('请输入一个数:')
# if a.findall(num):
#     print('这个数是负数')
# else:
#     print('这个数不是负数')

# content = '''苹果是绿色的
# 橙子是橙色的
# 香蕉是黄色的
# 乌鸦是黑色的'''
#
# a = re.compile(r'.色')
# result = a.findall(content)
#
# # 把列表里的元素遍历出来
# for item in result:
#     print(item)

# content = '''
# 绿色的
# 绿色色色色色色的
# 绿
# '''
# a = re.compile(r'绿色*')
# result = a.findall(content)
# for item in result:
#     print(item)

# + 表示匹配前面的子表达式一次或多次，不包括0次,它与*号不同的是*号是可以包括0次的。

# content = '''
# 绿色的
# 绿色色色色色色的
# 绿
# '''
#
# a = re.compile(r'绿色+')
# result = a.findall(content)
# for item in result:
#     print(item)


# content = '''
# 绿色的
# 绿色色色色色色的
# 绿
# '''
# a = re.compile(r'绿色?')
# result = a.findall(content)
# for item in result:
#     print(item)


# content = '''
# 绿色的
# 绿色色色色色色的
# 绿色色色色
# 绿色色色
# '''
# a = re.compile(r'绿色{3,}')
# result = a.findall(content)
# for item in result:
#     print(item)

# content = '<html><head><title>Title</title>'
# a = re.compile(r'<.*?>')
# result = a.findall(content)
#
# for item in result:
#     print(item)

# content = '''
# adj 11111111111
# abc 123abc11113
# cde 11932213131
# kbc kn123123131
# '''
#
# a = re.compile(r'1\d{10}')  # 指定匹配的规则是匹配电话号码
# result = a.findall(content)
#
# print('content中符合电话号码的规则的是')
# for item in result:
#
#     print(item)

# content = '''010-苹果 6元
# 020-香蕉 7元
# 030-西瓜 8元
# 040-哈密瓜 9元
# '''
#
# a = re.compile(r'\d元$',re.M)
# result = a.findall(content)
# for item in result:
#     print(item)

# content = '''
# 红色橙色
# 绿色橙色
# '''
# a = re.compile(r'红|橙')
# result = a.findall(content)
# for item in result:
#     print(item)


# content = '''
# 草莓，草莓是红色的
# 香蕉，香蕉是黄色的
# 西瓜，西瓜是绿色的
# '''
#
# a = re.compile(r'(.*)，(.*)是')
# result = a.findall(content)
#
# for item in result:
#     print(item)

# a = re.compile(r'^(.*)，',re.M)
# result = a.findall(content)
# for item in result:
#     print(item)

# content = '''张三，手机号码15945678901
# 李四，手机号码13945677701
# 王二，手机号码13845666901'''
#
# a = re.compile(r'(?P<name>.*)，.*码(?P<phone>\d+)')
# result = a.finditer(content)  # 使用迭代器进行匹配
#
# for item in result:
#     print(item.group('name'))
#     print(item.group('phone'))


# content = '''
# # <div class="el">
# #         <p class="t1">
# #             <span>
# #                 <a>Python开发工程师</a>
# #             </span>
# #         </p>
# #         <span class="t2">南京</span>
# #         <span class="t3">1.5-2万/月</span>
# # </div>
# # <div class="el">
# #         <p class="t1">
# #             <span>
# #                 <a>java开发工程师</a>
# #             </span>
# # 		</p>
# #         <span class="t2">苏州</span>
# #         <span class="t3">1.5-2/月</span>
# # </div>
# # '''
# #
# # a = re.compile(r'<div class="el">.*?<a>(.*?)</a>',re.DOTALL)
# # result = a.findall(content)
# #
# # for item in result:
# #     print(item)

# content = '''
# Python3 高级开发工程师 上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
# 测试开发工程师（C++/python） 上海墨鹍数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
# Python3 开发工程师 上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
# 测试开发工程师（Python） 赫里普（上海）信息科技有限公司上海-浦东新区1.1万/每月02-18剩余5人
# '''
#
# a = re.compile(r'[\d.]+万/每?月')
# result = a.findall(content)
# for item in result:
#     print(item)

# names = '关羽; 张飞, 赵云,马超, 黄忠  李逵'
# result = re.split(r'[,;\s]\s*',names)
# for item in result:
#     print(item)


# content = '''
# <div style='background-image: url(/webr6/img/A.png)'>设置A点</div>
#             <div style='background-image: url(/webr6/img/B.png)'>设置B点</div>
#             <div style='background-image: url(/webr6/img/C.png)'>取消复读并清除AB点</div>
#           </div>
#         </div>
#         <div style='clear: both;'></div>
#       </div>
#
#
#       <div id=gg1>
# 	    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
# 	    <!-- autofit#3 -->
# 	    <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2378083079360079" data-ad-slot="7500970363" data-ad-format="auto"></ins>
#         <script>
# 		( adsbygoogle = window.adsbygoogle || [] ).push( {} );
# 		</script>
#       </div>
#       <div id="editWin" style="display:none;">
#         <div id="editWinBar">
#           <div id="barTitle1">编辑区</div>
#           <div id="plus" onclick="fontSize(event, 0, 1)">大字</div>
#           <div id="minus" onclick="fontSize(event, 0, -1)">小字</div>
#           <div id="barTitle3" onclick="editWinForm.reset()">&nbsp;重写&nbsp;</div>
#           <div id="barTitle2" onclick="send()">&nbsp;保存&nbsp;</div>
#         </div>
# '''
# a = re.compile(r'<script async.*?c="(.*)">')
# result = a.findall(content)
#
# for item in result:
#     print(item)


'''
例1：北美地区的电话号

    编码方案：电话号码有一个3位数的区号和一位7位数的号码组成(这个7位数有分成  一个3位的局号
    和一个4位的路号，局号和路号之间使用连字符分隔) 每位电话号码可以是任意数字，但是区号和局
    号的第一位数字不能是0或1.实际书写号码是往往会把区号写在括号里面，或者将区号使用连字符
    和后面的局号连接起来。例如：（555）123-1234或555-123-1234，有时候在括号你里面会包含空
    格。例如：（555 ）123-1234 判断输入的号码是否是北美地区的电话号
'''

re_obj = re.compile(r'^[2-9]{1}\d{2}-[2-9]{1}\d{2}-\d{4}')

while True:
    phone = input('请输入北美地区电话号码 >> ')
    if re_obj.findall(phone):
        print('你输入的号码正确！')
        break
    else:
        print('你输入的号码有误,请重新输入！')
        continue






